package com.situ.dao;

import java.util.List;

import com.situ.common.Assist;
import com.situ.entity.IvIninvoice;
import com.situ.entity.IvOutinvoice;
import org.apache.ibatis.annotations.*;
import java.util.*;

/**
 * IvIninvoice的Dao接口
 *
 * @author
 */
@Mapper
public interface IvIninvoiceDao {



	/**
	 * 获得IvIninvoice数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	long getIvIninvoiceRowCount(Assist assist);
	
	/**
	 * 获得IvIninvoice数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	List<IvIninvoice> selectIvIninvoice(Assist assist);
	/**
	 * 通过IvIninvoice的id获得IvIninvoice对象
	 * 
	 * @param id
	 * @return
	 */
	IvIninvoice selectIvIninvoiceById(Object id);
	
	/**
	 * 获得一个IvIninvoice对象,以参数IvIninvoice对象中不为空的属性作为条件进行查询,返回符合条件的第一条
	 * 
	 * @param obj
	 * @return
	 */
	IvIninvoice selectIvIninvoiceObjSingle(IvIninvoice obj);
	
	/**
	 * 获得一个IvIninvoice对象,以参数IvIninvoice对象中不为空的属性作为条件进行查询
	 * 
	 * @param obj
	 * @return
	 */
	List<IvIninvoice> selectIvIninvoiceByObj(IvIninvoice obj);

	/**
	 * 插入IvIninvoice到数据库,包括null值
	 * 
	 * @param value
	 * @return
	 */
	int insertIvIninvoice(IvIninvoice value);
	
	/**
	 * 插入IvIninvoice中属性值不为null的数据到数据库
	 * 
	 * @param value
	 * @return
	 */
	int insertNotNullIvIninvoice(IvIninvoice value);
	
	/**
	 * 批量插入IvIninvoice到数据库,包括null值
	 * 
	 * @param value
	 * @return
	 */
	int insertIvIninvoiceByBatch(List<IvIninvoice> value);
	/**
	 * 通过IvIninvoice的id删除IvIninvoice
	 * 
	 * @param id
	 * @return
	 */
	int deleteIvIninvoiceById(Object id);
	
	/**
	 * 通过辅助工具Assist的条件删除IvIninvoice
	 * 
	 * @param assist
	 * @return
	 */
	int deleteIvIninvoiceByAssist(Assist assist);
	
	/**
	 * 通过IvIninvoice的id更新IvIninvoice中的数据,包括null值
	 * 
	 * @param enti
	 * @return
	 */
	int updateIvIninvoiceById(IvIninvoice enti);
	
	/**
	 * 通过IvIninvoice的id更新IvIninvoice中属性不为null的数据
	 * 
	 * @param enti
	 * @return
	 */
	int updateNotNullIvIninvoiceById(IvIninvoice enti);
	
	/**
	 * 通过辅助工具Assist的条件更新IvIninvoice中的数据,包括null值
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	int updateIvIninvoice(@Param("enti") IvIninvoice value, @Param("assist") Assist assist);
	
	/**
	 * 通过辅助工具Assist的条件更新IvIninvoice中属性不为null的数据
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	
	@Select("select e.EmpNmae,o.Counts,i.Used,i.Invalid,i.Archived from IV_OutInvoice o,SY_Emp e,IV_Invoice i where o.EmpID=e.id and e.id=i.EmpID")
	public List<Map> queryemp();

   


    int updateNotNullIvIninvoice(@Param("enti") IvIninvoice value, @Param("assist") Assist assist);


    @Select("select StartNo,EndNo from IV_InInvoice where StartNo=#{StartNo} and EndNo=#{EndNo}")
    IvIninvoice out(@Param("StartNo") String StartNo, @Param("EndNo") String EndNo);

    @Select("select StartNo,EndNo from IV_InInvoice where StartNo=#{StartNo} and EndNo=#{EndNo}")
    List<IvIninvoice> inputchack(@Param("StartNo") String StartNo, @Param("EndNo") String EndNo);

    IvOutinvoice type(@Param("StartNo") String StartNo, @Param("EndNo") String EndNo);

    @Select("select B.Used,B.Invalid,A.InvoiceType from IV_InInvoice A join IV_Invoice B on A.ID=B.InID and A.StartNo=#{StartNo} and A.EndNo=#{EndNo}")
    IvIninvoice Archive(@Param("StartNo") String StartNo, @Param("EndNo") String EndNo);

}